﻿using DifyToOpenAI.Model;
using System.Text.Json;
using System.Text.Json.Nodes;

namespace DifyToOpenAI.Common
{
    public static class ComServices
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static string DecodeJson(string json)
        {
            string DecodeJson = string.Empty;
            try
            {
                using (JsonDocument document = JsonDocument.Parse(json))
                {
                    DecodeJson = JsonSerializer.Serialize(document.RootElement, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping });
                }
            }
            catch (Exception)
            {
                DecodeJson = json;
                //throw;
            }
            if (string.IsNullOrWhiteSpace(DecodeJson))
            {
                DecodeJson = json;
            }
            return DecodeJson;
        }

        /// <summary>
        /// Unix时间戳,定义为从格林威治时间1970年01月01日00时00分00秒起
        /// </summary>
        public static DateTimeOffset UnixStart = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
        /// <summary>
        ///  Unix 时间戳总毫秒数
        /// </summary>
        /// <returns></returns>
        public static long TimestampMillis()
        {
            //  return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
            // 创建一个 DateTimeOffset 对象，表示 Unix 时间戳的起始时间（1970年1月1日）
            //// DateTimeOffset unixStart = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);

            // 计算当前时间与起始时间之间的时间间隔
            TimeSpan unixTimeSpan = DateTimeOffset.UtcNow - UnixStart;

            // 通过 TotalSeconds 属性将时间间隔转换为秒数，并将其转换为长整型
            long unixTimestamp = (long)unixTimeSpan.TotalMilliseconds;

            return unixTimestamp;
        }
        /// <summary>
        ///  Unix 时间戳总秒数
        /// </summary>
        /// <returns></returns>
        public static long TimestampSeconds()
        {
            // 计算当前时间与起始时间之间的时间间隔
            TimeSpan unixTimeSpan = DateTimeOffset.UtcNow - UnixStart;

            // 通过 TotalSeconds 属性将时间间隔转换为秒数，并将其转换为长整型
            long unixTimestamp = (long)unixTimeSpan.TotalSeconds;

            return unixTimestamp;

        }
        /// <summary>
        /// 判断地址最后是否为/，并补充
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetServerUrl(string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                return string.Empty;
            }

            try
            {
                if (!url.EndsWith("/"))
                {
                    return url + "/";
                }
            }
            catch
            {

                //throw;
            }

            return url;
        }

        public static string GetComErrorJson(string message) 
        {
            try
            {
                JsonObject errorobj = new JsonObject();
                errorobj.Add("error", message);
                string errorjson = JsonSerializer.Serialize(errorobj, ApplicationContext.jsonSerializerOptions);
                return errorjson;
            }
            catch (Exception)
            {
                return message;
               // throw;
            }
            
        }

        public static ModelData FindModelById(string modelId) 
        {
            List<ModelData> modelDatas = ApplicationContext.initmodelList.data!;
            // 使用 LINQ 的 FirstOrDefault 方法查找
            // model => model.id == targetId 是一个 Lambda 表达式，它定义了筛选条件
            ModelData? foundModel = modelDatas.FirstOrDefault(model => model.id == modelId);
            return foundModel!;
        }
    }
}
